//axios请求封装
import axios from 'axios'
import { useSystemStore } from '@/store/modules/system'
import { ElMessage } from 'element-plus'

const errorCode = {
  400: '请求错误',
  401: '无效的会话，或者会话已过期，请重新登录。',
  403: '当前操作没有权限',
  404: '请求错误,未找到该资源',
  405: '请求方法未允许',
  408: '请求超时',
  501: '网络未实现',
  502: '网络错误',
  503: '服务不可用',
  504: '网络超时',
  505: 'http版本不支持该请求',
  default: '系统未知错误，请反馈给管理员'
}

const service = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 10000 // 超时时间 单位是ms
})
// 2.请求拦截器
//发请求前做的一些处理，数据转化，配置请求头，设置token,设置loading等，按需添加
service.interceptors.request.use(
  (config) => {
    const $systemStore = useSystemStore()
    const token = $systemStore.token
    if (token) {
      config.headers.Authorization = 'Bearer ' + token
    }
    return config
  },
  (error) => {
    Promise.reject(error)
  }
)
// 3.响应拦截器
service.interceptors.response.use(
  (response) => {
    // console.log('响应信息', response)
    //接收到响应数据并成功后的一些共有的处理，关闭loading等
    // 未设置状态码则默认成功状态
    const code = response.data.code || 200
    // 获取错误信息
    const msg = errorCode[code] || response.data.msg || errorCode['default']
    let Message = ElMessage
    switch (code) {
      case 200:
        if (msg != null) {
          Message.success(msg)
        }
        break
      case 401:
        Message.error(msg)
        //跳转登录
        break
      default:
        Message.error(msg)
    }
    return response.data
  },
  (error) => {
    console.log('异常信息', error)
    /***** 接收到异常响应的处理开始 *****/
    if (error && error.response) {
      // 2.根据响应码具体处理
      switch (error.response.status) {
        case 400:
          error.message = '请求错误'
          break
        case 401:
          error.message = '登录凭证已失效，请重新登录'
          window.location.href = '/login'
          break
        case 403:
          error.message = '拒绝访问'
          break
        case 404:
          error.message = '请求错误,未找到该资源'
          break
        case 405:
          error.message = '请求方法未允许'
          break
        case 408:
          error.message = '请求超时'
          break
        case 500:
          error.message = error.response.data.msg
          break
        case 501:
          error.message = '网络未实现'
          break
        case 502:
          error.message = '网络错误'
          break
        case 503:
          error.message = '服务不可用'
          break
        case 504:
          error.message = '网络超时'
          break
        case 505:
          error.message = 'http版本不支持该请求'
          break
        default:
          error.message = `连接错误${error.response.status}`
      }
    } else {
      error.message = '连接服务器失败'
    }
    ElMessage.error(error.message)
    // return Promise.resolve();
  }
)
export default service
